<?php namespace Common\Model;
//	调用核心包里面的Model类
	use \Hdphp\Model\Model;
	
	
//	继承与核心包的Model类，核心包的的东西最好不要改，只要继承，修改本脚本就好
	class Goods extends Model{
//		定义成员属性，看是需要哪个表，固定写法
		protected $table = 'snshop_goods';
		
		
		protected $validate = array(
//			array('字段名','验证方法','方法说明（告知用户）',验证条件,验证时间),
			array('gname','required','类型名称不能为空',3,3),
		);
		
		
//		自动添加
		protected $auto = array(
//				array(表单字段名,处理方法,方法类型,验证条件,处理时间); 
				array('time','time','function',3,1),
			);

//		添加
		public function store(){
//			var_dump($_POST);die;

			$this -> imgArrToStr($_POST);

//			自动验证
			if(!$this -> create()){
//				var_dump($this -> data);die;
				return FALSE;
			}
//				$this -> add() 这是继承父类 model 类里面的方法，自动给当前表插入一条数据，插入数据所需的值就是经过验证的字段，所以必须配套使用

//			商品详情表验证
			$detailModel = new \Common\Model\Detail;
			if(!$detailModel -> create()){
//				var_dump($this -> data);die;
				$this->error=$detailModel -> getError();
				return FALSE;
			}
				
				
//				var_dump($detailModel -> data);die;
//				var_dump($this -> data);die;
				
				
//				$data = array('gname' => 'ewaf');
				
				$gid = $this -> add();
//				$gid = 1;
//				添加商品属性表
					$goods_attrModel = new \Common\Model\Goods_attr;
//				添加规格
//				var_dump($_POST['spec']);die;
//				判断 添加规格 是否为空
				if(!empty($_POST['spec'])){
//					 循环以得到添加数据
					foreach(Q('post.spec',array()) as $k => $v){
//						p($k);
//						p($v);
//							设定两个空数组，以便存储数据
							$gtvalue = array();
							$added = array();
//							循环第二层数据，进行存储
						foreach($v as $kk => $vv){
//							p($kk);
//							p($vv);
//							再循环，获取最里面的值
//							判断$v里面的键值$kk 所属的字段，将对应的内容压入空数组内
							if($kk == 'gtvalue'){
								foreach($vv as $key => $value){
									$gtvalue[] = $value;
								}
							}
							if($kk == 'added'){
								foreach($vv as $key => $value){
									$added[] = $value;
								}	
							}
							
							
						}
//						p($gtvalue);
//						p($added);
//						将得到的数据，组合成相对数据，进行添加
						foreach($gtvalue as $keyk => $valuev){
							$data = array(
								'taid' => $k,
								'snshop_goods_gid' => $gid,
								'gtvalue' => $valuev,
								'added' => $v['added'][$keyk],
							);
							
							$goods_attrModel -> add($data);
//							p($data);
						}
							
					}
//					die;


////  				2-2添加商品中的规格,另一种简便方法
//					$spec=Q('post.spec');
//					
//					foreach($spec as $k=>$v){
//						foreach($v['gtvalue'] as $kk=>$vv){
//							$data=array(
//							'taid'=>$k,
//							'snshop_goods_gid'=>$gid,
//							'gtvalue'=>$vv,
//							'added'=>$v['added'][$kk],
//							);
//							$goods_attrModel->add($data);	
//						}
//					}
//					//添加规格结束	
				}
				

				
				

//				添加属性
//				var_dump($_POST['attr']);die;
				foreach(Q('post.attr',array()) as $k => $v){
					if($v){
//						var_dump($v);
						$data = array(
								'taid' => $k,
								'snshop_goods_gid' => $gid,
								'gtvalue' => $v,
							);
//							p($data);
						$goods_attrModel -> add($data);
					}
				}
//				die;
				
				
//				添加商品详细表
				$detailModel->data['snshop_goods_gid']=$gid;
//				var_dump($arcDataModel->data);die;
				$detailModel->add();
				
				return true;
			
			
		}


//		图片数组转化为字符串
		private function imgArrToStr($_POST){
			//			处理上传上来的商品图片路径，因为上传进来的可能是数组，将数组转化为字符串，然后赴会原值去，就可以了
//			var_dump($_POST);die;
//			获取 small medium big 三个字段，将数组转化为字符串赋回去，注意判断是否为数组
			if(is_array(Q('post.small',array()))){
				$small = $_POST['small'];
				foreach($small as $k => $v){
					$small[$k] = basename($v);
				}
				$small = implode(";", $small);
				$_POST['small'] = $small;
			}
			if(is_array(Q('post.medium',array()))){
				$medium = $_POST['medium'];
				foreach($medium as $k => $v){
					$medium[$k] = basename($v);
				}
				$medium = implode(";", $medium);
				$_POST['medium'] = $medium;
			}
			if(is_array(Q('post.big',array()))){
				$big = $_POST['big'];
				foreach($big as $k => $v){
					$big[$k] = basename($v);
				}
				$big = implode(";", $big);
				$_POST['big'] = $big;
			}
//			下面这个数组没啥用，没有字段
			if(is_array(Q('post.photo',array()))){
				$photo = $_POST['photo'];
				$photo = implode(";", $_POST['photo']);
				$_POST['photo'] = $photo;
			}
			
//			 商品列表图册
			if(is_array(Q('post.pic',array()))){
				$pic = $_POST['pic'];
				$pic = implode(";", $_POST['pic']);
				$_POST['pic'] = $pic;
			}
//			var_dump($_POST);die;
		}
		

		
		
//		更新数据
		public function edit(){
			$this -> imgArrToStr($_POST);
//			将post提交数据通过create 处理，然后注入数据库进行修改
//			因为有主键seve（）
			$gid = Q('post.gid',0,'intval');
			if(!$this -> create()) return FALSE;
//				p($detailModel -> data);die;
			
//			商品详情表验证
			$detailModel = new \Common\Model\Detail;
			
			if(!$detailModel -> create()){
//				var_dump($this -> data);die;
				$this->error=$detailModel -> getError();
				return FALSE;
			}
//				p($detailModel -> data);die;
				
				
//			使用框架内置方法save方法,post提交数据必须有主键！！！
			$this -> save();
			
//			获得修改数据的商品详情表的主键
			$did = $detailModel -> where('snshop_goods_gid',$gid) -> pluck('did');
//			var_dump($did);die;
			$detailModel -> data['did'] = $did;
//			p($detailModel -> data);die;
			$detailModel ->save();
			
//			商品属性表因为条数不明，所以要先执行，将原来的数据删除，然后将新的数据添加进去
			$goods_attrModel = new \Common\Model\Goods_attr;
			$goods_attrModel->where('snshop_goods_gid',$gid)->delete();
			
//			添加商品属性表
//			规格
			if(!empty($_POST['spec'])){
//				2-2添加商品中的规格,另一种简便方法
					$spec=Q('post.spec');
					
					foreach($spec as $k=>$v){
						foreach($v['gtvalue'] as $kk=>$vv){
							$data=array(
							'taid'=>$k,
							'snshop_goods_gid'=>$gid,
							'gtvalue'=>$vv,
							'added'=>$v['added'][$kk],
							);
							$goods_attrModel->add($data);	
						}
					}
					//添加规格结束	
			}
//				添加属性
//				var_dump($_POST['attr']);die;
			foreach(Q('post.attr',array()) as $k => $v){
				if($v){
//						var_dump($v);
					$data = array(
							'taid' => $k,
							'snshop_goods_gid' => $gid,
							'gtvalue' => $v,
						);
//							p($data);
					$goods_attrModel -> add($data);
				}
			}			
			return TRUE;
		}
//		删除商品数据
		public function del(){
//			var_dump($_GET);die;
//			将添加的三个表分别删除
//			删除主商品表
			$gid = Q('get.gid',0,'intval');
	//		var_dump($gid);die;
	//		从数据库获得数据，然后删除
			$this -> where('gid',$gid) -> delete();
//			删除商品属性表
			Db::table('snshop_goods_attr')->where('snshop_goods_gid',$gid)->delete();
//			删除商品详情表
			Db::table('snshop_detail')->where('snshop_goods_gid',$gid)->delete();
			return TRUE;
		}
	}
	
	
	
	
	
	
	
	
	
	
	
	?>